/**
 * Copyright (c) 2020-2021 浦东大爷 All rights reserved.
 * 机会永远都是留给有准备的人
 */
package com.job.moudle4.task1;

import java.io.Serializable;
import java.util.Objects;

/**
 * @author: Scott
 * @date: 2020-11-22
 * @description:学生类
 *              学生的信息有：学号、姓名、年龄。
 *
 *              基于学生信息管理系统增加以下两个功能：
 *
 *             a.自定义学号异常类和年龄异常类，并在该成员变量不合理时产生异常对象并抛出。
 *
 *             b.当系统退出时将 List 集合中所有学生信息写入到文件中，当系统启动时读取文件中所 有学生信息到 List 集合中。
 */
public class Student implements Serializable {

    private static final long serialVersionUID = 4995050575736724407L;

    private String id;
    private String name;
    private Integer age;

    public Student() {
    }

    public Student(String id, String name, Integer age) throws StudentAgeException {
        setId(id);
        setName(name);
        setAge(age);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return id.equals(student.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) throws StudentAgeException {
        // 年龄太小或者太大直接抛出异常类
        if(age < 5 || age > 60) throw new StudentAgeException("年龄太小或者太大，不允许上学，你输入的年龄：" + age);
        else this.age = age;
    }
}
